import pandas as pd
from plotly import express as px, io as pio
pd.options.plotting.backend = 'plotly'
pio.renderers.default = 'plotly_mimetype+notebook_connected'Análise dos Dados
TODO: Separar o que foi feito no dataset bruto do depois das mudanças
Análises de dados e investigações no Dataset bruto
Descrição de como foi feita a análise(perguntas que foram feitas para a base, possíveis pontos de limpeza, versões do python e bibliotecas)
essa é a parte que viemos fazendo até agora, identificando o que nos será útil da base que escolhemos
output_file = '../data/cursos.csv.zip'
df = pd.read_csv(output_file, dtype={'cod_municipio': int})
df| ano | regiao | uf | cod_municipio | nome_municipio | capital | latitude | longitude | cod_area | area | curso | rede_publica | presencial | bacharel | ingressantes | ingressantes_fem | concluintes | concluintes_fem | frac_ingressantes | frac_concluintes | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2010 | Norte | RO | 1100049 | Cacoal | False | -11.4343 | -61.4562 | 51 | Ciências biológicas e correlatas | Biologia | False | True | True | 21 | 13 | 6 | 4 | 0.619048 | 0.666667 |
| 1 | 2010 | Norte | RO | 1100049 | Cacoal | False | -11.4343 | -61.4562 | 71 | Engenharia e profissões correlatas | Gestão ambiental | False | True | False | 61 | 26 | 27 | 12 | 0.426230 | 0.444444 |
| 2 | 2010 | Norte | RO | 1100049 | Cacoal | False | -11.4343 | -61.4562 | 71 | Engenharia e profissões correlatas | Gestão ambiental | False | False | False | 88 | 48 | 10 | 5 | 0.545455 | 0.500000 |
| 3 | 2010 | Norte | RO | 1100064 | Colorado do Oeste | False | -13.1174 | -60.5454 | 71 | Engenharia e profissões correlatas | Gestão ambiental | True | True | False | 59 | 33 | 23 | 11 | 0.559322 | 0.478261 |
| 4 | 2010 | Norte | RO | 1100122 | Ji-Paraná | False | -10.8777 | -61.9322 | 71 | Engenharia e profissões correlatas | Gestão ambiental | False | False | False | 109 | 52 | 32 | 15 | 0.477064 | 0.468750 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 17974 | 2019 | Centro-Oeste | DF | 5300108 | Brasília | True | -15.7795 | -47.9297 | 71 | Engenharia e profissões correlatas | Gestão ambiental | False | False | False | 25 | 13 | 6 | 3 | 0.520000 | 0.500000 |
| 17975 | 2019 | Centro-Oeste | DF | 5300108 | Brasília | True | -15.7795 | -47.9297 | 71 | Engenharia e profissões correlatas | Gestão ambiental | False | False | False | 17 | 7 | 9 | 3 | 0.411765 | 0.333333 |
| 17976 | 2019 | Centro-Oeste | DF | 5300108 | Brasília | True | -15.7795 | -47.9297 | 71 | Engenharia e profissões correlatas | Gestão ambiental | False | False | False | 24 | 8 | 3 | 2 | 0.333333 | 0.666667 |
| 17977 | 2019 | Centro-Oeste | DF | 5300108 | Brasília | True | -15.7795 | -47.9297 | 71 | Engenharia e profissões correlatas | Gestão ambiental | False | False | False | 48 | 14 | 20 | 2 | 0.291667 | 0.100000 |
| 17978 | 2019 | Centro-Oeste | DF | 5300108 | Brasília | True | -15.7795 | -47.9297 | 54 | Matemática e estatística | Estatística | True | True | True | 88 | 23 | 23 | 6 | 0.261364 | 0.260870 |
17979 rows × 20 columns
Ao longo do tempo (lineplot)
Ingressantes & Concluintes Femininas
def get_grouped(df: pd.DataFrame, by_col):
by_cols = ['ano', by_col]
use_cols = by_cols + ['ingressantes', 'concluintes', 'ingressantes_fem', 'concluintes_fem']
dfg = df[use_cols].groupby(by=by_cols, as_index=False).sum()
dfg = dfg.melt(
id_vars = use_cols[:-4],
value_vars = use_cols[-4:],)
return dfgPor Região
var = 'regiao'
dfg = get_grouped(df, var)
dfg| ano | regiao | variable | value | |
|---|---|---|---|---|
| 0 | 2010 | Centro-Oeste | ingressantes | 9865 |
| 1 | 2010 | Nordeste | ingressantes | 13979 |
| 2 | 2010 | Norte | ingressantes | 6579 |
| 3 | 2010 | Sudeste | ingressantes | 71278 |
| 4 | 2010 | Sul | ingressantes | 17126 |
| ... | ... | ... | ... | ... |
| 195 | 2019 | Centro-Oeste | concluintes_fem | 1056 |
| 196 | 2019 | Nordeste | concluintes_fem | 2121 |
| 197 | 2019 | Norte | concluintes_fem | 890 |
| 198 | 2019 | Sudeste | concluintes_fem | 8286 |
| 199 | 2019 | Sul | concluintes_fem | 2456 |
200 rows × 4 columns
px.line(dfg, x='ano', y='value', color=var, line_dash='variable')Por Unidade Federativa
var = 'uf'
dfg = get_grouped(df, var)
dfg| ano | uf | variable | value | |
|---|---|---|---|---|
| 0 | 2010 | AC | ingressantes | 514 |
| 1 | 2010 | AL | ingressantes | 924 |
| 2 | 2010 | AM | ingressantes | 2405 |
| 3 | 2010 | AP | ingressantes | 202 |
| 4 | 2010 | BA | ingressantes | 3287 |
| ... | ... | ... | ... | ... |
| 1075 | 2019 | RS | concluintes_fem | 1010 |
| 1076 | 2019 | SC | concluintes_fem | 512 |
| 1077 | 2019 | SE | concluintes_fem | 90 |
| 1078 | 2019 | SP | concluintes_fem | 4957 |
| 1079 | 2019 | TO | concluintes_fem | 65 |
1080 rows × 4 columns
px.line(dfg, x='ano', y='value', color=var, line_dash='variable')Por Area STEM
var = 'cod_area'
dfg = get_grouped(df, var)
dfg| ano | cod_area | variable | value | |
|---|---|---|---|---|
| 0 | 2010 | 51 | ingressantes | 7009 |
| 1 | 2010 | 53 | ingressantes | 6892 |
| 2 | 2010 | 54 | ingressantes | 1660 |
| 3 | 2010 | 61 | ingressantes | 54624 |
| 4 | 2010 | 71 | ingressantes | 48642 |
| ... | ... | ... | ... | ... |
| 195 | 2019 | 51 | concluintes_fem | 2893 |
| 196 | 2019 | 53 | concluintes_fem | 1448 |
| 197 | 2019 | 54 | concluintes_fem | 320 |
| 198 | 2019 | 61 | concluintes_fem | 3858 |
| 199 | 2019 | 71 | concluintes_fem | 6290 |
200 rows × 4 columns
px.line(dfg, x='ano', y='value', color=var, line_dash='variable')- 51: ciências biológicas e correlatas
- 54: matemática e estatística
- 53: ciências físicas
- 61: computação
- 71: engenharias e correlatas
Por se é Capital
var = 'capital'
dfg = get_grouped(df, var)
dfg| ano | capital | variable | value | |
|---|---|---|---|---|
| 0 | 2010 | False | ingressantes | 55133 |
| 1 | 2010 | True | ingressantes | 63694 |
| 2 | 2011 | False | ingressantes | 62350 |
| 3 | 2011 | True | ingressantes | 73429 |
| 4 | 2012 | False | ingressantes | 77846 |
| ... | ... | ... | ... | ... |
| 75 | 2017 | True | concluintes_fem | 7746 |
| 76 | 2018 | False | concluintes_fem | 7492 |
| 77 | 2018 | True | concluintes_fem | 6921 |
| 78 | 2019 | False | concluintes_fem | 7677 |
| 79 | 2019 | True | concluintes_fem | 7132 |
80 rows × 4 columns
px.line(dfg, x='ano', y='value', color=var, line_dash='variable')Por se é Bacharelado
var = 'bacharel'
dfg = get_grouped(df, var)
dfg| ano | bacharel | variable | value | |
|---|---|---|---|---|
| 0 | 2010 | False | ingressantes | 44212 |
| 1 | 2010 | True | ingressantes | 74615 |
| 2 | 2011 | False | ingressantes | 51459 |
| 3 | 2011 | True | ingressantes | 84320 |
| 4 | 2012 | False | ingressantes | 58819 |
| ... | ... | ... | ... | ... |
| 75 | 2017 | True | concluintes_fem | 11779 |
| 76 | 2018 | False | concluintes_fem | 3868 |
| 77 | 2018 | True | concluintes_fem | 10545 |
| 78 | 2019 | False | concluintes_fem | 3855 |
| 79 | 2019 | True | concluintes_fem | 10954 |
80 rows × 4 columns
px.line(dfg, x='ano', y='value', color=var, line_dash='variable')Por se é Rede Pública
var = 'rede_publica'
dfg = get_grouped(df, var)
dfg| ano | rede_publica | variable | value | |
|---|---|---|---|---|
| 0 | 2010 | False | ingressantes | 82799 |
| 1 | 2010 | True | ingressantes | 36028 |
| 2 | 2011 | False | ingressantes | 92579 |
| 3 | 2011 | True | ingressantes | 43200 |
| 4 | 2012 | False | ingressantes | 113823 |
| ... | ... | ... | ... | ... |
| 75 | 2017 | True | concluintes_fem | 8203 |
| 76 | 2018 | False | concluintes_fem | 6209 |
| 77 | 2018 | True | concluintes_fem | 8204 |
| 78 | 2019 | False | concluintes_fem | 5982 |
| 79 | 2019 | True | concluintes_fem | 8827 |
80 rows × 4 columns
px.line(dfg, x='ano', y='value', color=var, line_dash='variable')Por se é Presencial
var = 'presencial'
dfg = get_grouped(df, var)
dfg| ano | presencial | variable | value | |
|---|---|---|---|---|
| 0 | 2010 | False | ingressantes | 8099 |
| 1 | 2010 | True | ingressantes | 110728 |
| 2 | 2011 | False | ingressantes | 9181 |
| 3 | 2011 | True | ingressantes | 126598 |
| 4 | 2012 | False | ingressantes | 13438 |
| ... | ... | ... | ... | ... |
| 75 | 2017 | True | concluintes_fem | 14653 |
| 76 | 2018 | False | concluintes_fem | 1126 |
| 77 | 2018 | True | concluintes_fem | 13287 |
| 78 | 2019 | False | concluintes_fem | 1216 |
| 79 | 2019 | True | concluintes_fem | 13593 |
80 rows × 4 columns
px.line(dfg, x='ano', y='value', color=var, line_dash='variable')Dispersão (scatterplot)
Por Ano
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='ano', opacity=.75, size='concluintes_fem')Por Região
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='regiao', opacity=.75, size='concluintes_fem')Por Unidade Federativa (UF)
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='uf', opacity=.75, size='concluintes_fem')Por se é Capital
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='capital', opacity=.75, size='concluintes_fem')Por Area STEM
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='area', opacity=.75, size='concluintes_fem')Por se é Rede Pública
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='rede_publica', opacity=.75, size='concluintes_fem')Por se é Presencial
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='presencial', opacity=.75, size='concluintes_fem')Por se é Bacharelado
px.scatter(df, x='frac_ingressantes', y='frac_concluintes', color='bacharel', opacity=.75, size='concluintes_fem')Histograma
Ingressantes
df['frac_ingressantes'].hist(bins=5)Concluintes
df['frac_concluintes'].hist()